package net.wang.zk.demo;


import lombok.extern.slf4j.Slf4j;
import org.apache.zookeeper.ZooKeeper;

import java.io.IOException;

@Slf4j
public class ZKTest {
    /**
     * 连接过程是异步的
     * 连接成功后会收到一个watch通知
     * {@link ZooKeeper#ZooKeeper(java.lang.String, int, org.apache.zookeeper.Watcher, long, byte[], boolean)}
     * connectString：连接地址，可以是单个节点，也可以是集群
     * sessionTimeout： 连接超时时间
     * watcher： 通知事件，如果对应的事件触发，会收到一个通知，如果不需要，可以为NULL
     * sessionId :会话ID
     * sessionPasswd ：会话密码，当会话丢失后，可以凭借ID和密码重新获取会话
     * canBeReadOnly ：可读，物理既断开时，数据可以读取，但是不能写入，不推荐使用
     */
    // static final String zkServerPath = "localhost:2181";  //单个节点连接
    public static final String zkServerPath = "localhost:2181,localhost:2182,localhost:2183";//伪分布式集群连接
    public static final Integer timeout = 5000;

    public static void main(String[] args) throws IOException, InterruptedException {

        ZooKeeper zooKeeper = new ZooKeeper(zkServerPath, timeout, watchedEvent -> {
            log.warn("接受到watch通知：{}", watchedEvent);
        });

        log.info("zk 链接zookeeper服务器......");

        log.info("链接状态：{}", zooKeeper.getState());

        Thread.sleep(20000);

        log.info("链接状态：{}", zooKeeper.getState());

    }

}


